package csdn.xiancheng.li08;

public class Bum {
    int bumNum=0;
    boolean flag=false;

    //生产包子，锁
    public synchronized void producer(int count){
        //等待---有包子
        //多线程不能用if，必须用while，因为多线程下第一个抢到锁的不一定是我们想要的
        while (flag){
            try{
                wait();
            }catch(Exception e){
                 e.printStackTrace();
            } 
        }
        //生产---无包子
        bumNum+=count;
        flag=true;
        System.out.println(Thread.currentThread().getName()+"生产了"+count+"个包子");

        //通知消费者
        notifyAll();
    }


    //吃包子，锁
    public synchronized void customer(){
        //等待---无包子
        while (!flag) {
            try{
                wait();
            }catch(Exception e){
                 e.printStackTrace();
            } 
        }
        //吃包子---有包子
        System.out.println(Thread.currentThread().getName()+"框框炫包子");
        bumNum--;
        if(bumNum==0){
            flag=false;
            notifyAll();
        }
    }
}
